import { IMiddleware } from '@midwayjs/core';
import { Middleware ,Inject } from '@midwayjs/decorator';
import { NextFunction, Context } from '@midwayjs/koa';
import { JwtService } from '@midwayjs/jwt';
import config  from '../private/clienconfig'
@Middleware()
export class LoginMiddleware implements IMiddleware<Context, NextFunction> {
    @Inject()
    jwtService: JwtService;



    resolve() {
    return async (ctx: Context, next: NextFunction) => {
      
      console.log( "loginurl",ctx.url );
     
      let result;
//    得到token 我们需要解析一下是否 正确 
//  如果 是登录页面我们就 直接next() 不需要token校验
      if(  this.ignore(ctx) ){
         result = await next();
      }else{
          // console.log(ctx.header);
          
        var  token  = ctx.header['authorization']
        // console.log(  'token' ,token );
        token = token.replace("Bearer ","")
     
        //  try{ 
          await  this.jwtService.verify(token,config.secret , { complete: true,})
          // console.log( "中间件的userinfotoken校验", userresult);
           result = await next();
        //  }catch (err){ 
        //   // console.log( "asdasdasd",ctx.URL);
        //       console.log( "登录错误",err);
              
        //       return  {   
        //               code:40005,
        //               msg:"请重新登录"
        //         }
        //  }
      
      }
      
      return result;
    };
  }

  // ignore 函数名 ( , ctx :  req   ) : boolean    
    //   : boolean     该函数返回出来的数据类型 为 布尔值
  ignore(ctx: Context): boolean {
    // 下面的路由将忽略此中间件
    var arr = ['/user/checkusername','/user/login','/user/register'] 

    return arr.some((v)=>    ctx.url == v  )
  }

  static getName(): string {
    return 'userlogin';
  }
}